#include <string>
#include <iostream>

#include "compile_run.hpp"
#include "jsoncpp/json/json.h"
#include "../comm/httplib.h"

//负责接收网络请求，并编译运行出结果
using namespace httplib;
using namespace NS_COMPILE_RUN;
// int main()
// {
//     using namespace NS_COMPILE_RUN;
//     std::string in_json;
//     Json::Value in_value;
//     in_value["code"] = R"(#include<iostream>
//     int main(){
//     std::cout<<"hello word"<<std::endl;
//     int *p=new int[1024*1024*50];
//     return 0;}
//     )";
//     in_value["input"] = "";
//     in_value["cpu_limit"] = 1;
//     in_value["mem_limit"] = 1024 * 20;

//     // 序列化
//     Json::FastWriter wirter;
//     in_json = wirter.write(in_value);

//     std::string out_json;
//     compile_and_run::Start(in_json, &out_json);
//     std::cout << out_json << std::endl;

//     return 0;
// }

void Usage(const std::string proc)
{
    std::cout << proc << " port" << std::endl;
}
//./compiler port
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage(argv[0]);
        exit(-1);
    }
    Server ser;
    //测试
    // ser.Get("/hello",[](const Request& req,Response& resp){
    //     resp.set_content("hello httplib","text/plain;charset=utf-8");
    // });
    // ser.set_base_dir("./wwwroot");

    ser.Post("/compile_run",[](const Request& req,Response&resp){
        std::string in_json=req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            compile_and_run::Start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf-8");
        }
    });
    // 设置服务器为监听
    ser.listen("0.0.0.0", std::stoi(argv[1]));
    return 0;
}